/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package beans.dao;

import beans.DiscapacidadTratamiento;
import beans.Tratamiento;
import core.bd;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Set;

/**
 *
 * @author Usuario
 */
public class TratamientoDAO {

    public static void guardarItem(Tratamiento tratamiento)throws Exception{
                
        Connection conexion = null;
        PreparedStatement statement = null;
        ResultSet rs = null;
        
        try{
            conexion = bd.getConexion();

            statement = conexion.prepareStatement("INSERT INTO tratamiento("
                    + "id_paciente, id_medico, fecha_evaluacion, "
                    + "nota) VALUES (?, ?, ?, ?);");
            statement.setInt(1, tratamiento.getIdPaciente());
            statement.setInt(2, tratamiento.getIdMedico());
            statement.setDate(3, new java.sql.Date(
                    tratamiento.getFechaEvaluacion().getTime()));
            statement.setString(4, tratamiento.getNota());
            
            statement.executeUpdate();
            
            //obtenemos el ultimo id generado en el DBMS.
            statement = conexion.prepareStatement("SELECT id_tratamiento FROM tratamiento "
                    + "ORDER BY id_tratamiento DESC LIMIT 1");

            rs = statement.executeQuery();
            Long idGenerado = null;
            if (rs.next()) {
                idGenerado = (rs.getLong("id_tratamiento"));
                tratamiento.setId(idGenerado.intValue());
                for(DiscapacidadTratamiento disc: tratamiento.getDispacacidadTratamientos()){
                    disc.setTratamiento(tratamiento);
                    DiscapacidadTratamientoDAO.guardarItem(disc);
                }
            }

        }catch(SQLException e){
            e.printStackTrace();
            throw new Exception("Error al guardar tratamiento");
        }finally{
//            bd.liberaConexion(conexion);
//            bd.liberarStatement(statement);
        }
    }
    
    public static Tratamiento getTratamiento(Integer idPaciente){
        
        Tratamiento tratamiento =
                new Tratamiento();
        Connection conexion = null;
        PreparedStatement statement = null;
        ResultSet rs = null;

        try {
            conexion = bd.getConexion();
            statement = conexion.prepareStatement(""
                    + "select * from tratamiento where id_paciente = ?");
            statement.setInt(1, idPaciente);
            rs = statement.executeQuery();
            if (rs.next()) {
                tratamiento.setId(rs.getInt("id_tratamiento"));
                tratamiento.setIdPaciente(idPaciente);
                tratamiento.setIdMedico(rs.getInt("id_medico"));
                tratamiento.setFechaEvaluacion(rs.getDate("fecha_evaluacion"));
                tratamiento.setNota(rs.getString("nota"));
                
                tratamiento.setDispacacidadTratamientos(
                        DiscapacidadTratamientoDAO.getDiscapacidadesTratamiento(tratamiento));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return tratamiento;
    }
    
    public static Set<Tratamiento> getTratamientos() {
        return null;
    }
    
    public static void actualizarSoloTratamiento(Tratamiento tratamiento) throws Exception{
        Connection conexion = null;
        PreparedStatement statement = null;

        try {
            conexion = bd.getConexion();

            statement = conexion.prepareStatement("UPDATE tratamiento set "
                    + "fecha_evaluacion = ?, nota=? where id_tratamiento = ?");
            statement.setDate(1, 
                    new java.sql.Date(tratamiento.getFechaEvaluacion().getTime()));
            statement.setString(2, tratamiento.getNota());
            statement.setInt(3, tratamiento.getId());

            statement.executeUpdate();


        } catch (SQLException e) {
            throw new Exception("Error al guardar tratamiento");
        } finally {
//            bd.liberaConexion(conexion);
//            bd.liberarStatement(statement);
        }
    }
}
